package dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import dto.CondicionVentaTO;
import dto.FacturaTO;
import dto.ReferenciaFacturaTO;

public class Factura {
	private Integer id;
	private Date fechaEmision;
	private Date fechaVencimiento;
	private Cliente cliente;
	private List<CondicionVenta> condicionesVenta;
	private List<ReferenciaFactura> referencias;

	public Factura() {
		condicionesVenta = new ArrayList<CondicionVenta>();
		referencias = new ArrayList<ReferenciaFactura>();
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Date getFechaEmision() {
		return fechaEmision;
	}

	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}

	public Date getFechaVencimiento() {
		return fechaVencimiento;
	}

	public void setFechaVencimiento(Date fechaVencimiento) {
		this.fechaVencimiento = fechaVencimiento;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<CondicionVenta> getCondicionesVenta() {
		return condicionesVenta;
	}

	public void agregarCondicionVenta(CondicionVenta condicion) {
		condicionesVenta.add(condicion);
	}

	public List<ReferenciaFactura> getReferencias() {
		return referencias;
	}

	public void agregarReferencia(ReferenciaFactura referencia) {
		referencias.add(referencia);
	}

	public FacturaTO getDTO() {
		FacturaTO dto = new FacturaTO();
		dto.setId(id);
		dto.setFechaEmision(fechaEmision);
		dto.setFechaVencimiento(fechaVencimiento);
		if (cliente != null)
			dto.setCliente(cliente.getDTO());
		for (CondicionVenta cv : condicionesVenta)
			dto.agregarCondicionVenta(cv.getDTO());
		for (ReferenciaFactura ref : referencias)
			dto.agregarReferencia(ref.getDTO());
		return dto;
	}

	public static Factura fromDTO(FacturaTO dto) {
		if (dto == null)
			return null;
		Factura f = new Factura();
		f.setId(dto.getId());
		f.setFechaEmision(dto.getFechaEmision());
		f.setFechaVencimiento(dto.getFechaVencimiento());
		f.setCliente(Cliente.fromDTO(dto.getCliente()));
		for (CondicionVentaTO cv : dto.getCondicionesVenta())
			f.agregarCondicionVenta(CondicionVenta.fromDTO(cv));
		for (ReferenciaFacturaTO ref : dto.getReferencias())
			f.agregarReferencia(ReferenciaFactura.fromDTO(ref));
		return f;
	}
}